---
title: C++ 語言介紹
---

## C++ 語言歷史和設計哲學

C++ 是一種功能強大、通用性強的程式語言，由 Bjarne Stroustrup 在 C 語言的基礎上擴展創建，最初名為「帶類的 C」。它的設計理念是「零開銷原則」，即不使用的特性不應帶來任何性能開銷。C++ 融合了高級和低級程式設計能力，使其適用於廣泛的應用場景。

## 與 JavaScript 的對比概述

| 特性           | JavaScript                               | C++                                      |
| :---------------- | :--------------------------------------- | :--------------------------------------- |
| **範式**      | 多範式（主要為函數式、物件導向、事件驅動） | 多範式（物件導向、泛型、程序式） |
| **類型**        | 動態類型，弱類型          | 靜態類型，強類型         |
| **執行**     | 解釋型（在瀏覽器/Node.js 中進行 JIT 編譯） | 編譯型                                 |
| **記憶體管理**  | 自動（垃圾回收）           | 手動（指標、`new`/`delete`）、智能指標 |
| **性能**   | 通常較慢（由於解釋/垃圾回收） | 通常較快（編譯型，底層控制） |
| **用例**     | Web 開發（前端/後端）、行動應用、桌面應用 | 系統程式設計、遊戲開發、嵌入式系統、高性能計算 |

## 編譯型 vs 解釋型語言

**JavaScript（解釋型/JIT 編譯）：**
JavaScript 程式碼通常由解釋器（如瀏覽器的 JavaScript 引擎或 Node.js）執行。雖然現代 JavaScript 引擎使用即時（JIT）編譯將程式碼在運行時轉換為機器碼以提高性能，但其核心特點是程式碼不會預先編譯成獨立的執行檔。

**C++（編譯型）：**
C++ 程式碼在執行前必須編譯成機器碼。這個過程包括：
1.  **預處理：** 處理 `#include` 和 `#define` 等指令。
2.  **編譯：** 將預處理後的程式碼轉換為組合語言程式碼。
3.  **組合：** 將組合語言程式碼轉換為機器碼（目標檔案）。
4.  **連結：** 將目標檔案和函式庫組合為一個可執行程式。

這個編譯步驟允許進行廣泛的優化，並生成高效的本地程式碼。

## C++ 應用場景和優勢

**應用場景：**
*   **系統程式設計：** 作業系統、設備驅動、嵌入式系統。
*   **遊戲開發：** 高性能遊戲引擎（例如 Unreal Engine、Unity 的核心）。
*   **高性能計算：** 科學模擬、金融建模、交易系統。
*   **圖形和多媒體：** 圖像/影片處理、3D 圖形。
*   **資料庫：** 資料庫系統（例如 MySQL、MongoDB）。
*   **編譯器和解釋器：** 構建程式語言工具。

**優勢：**
*   **性能：** 由於直接記憶體存取和編譯，性能接近裸機。
*   **控制：** 對硬體資源和記憶體的精細控制。
*   **可擴展性：** 適用於大型複雜系統。
*   **可移植性：** 程式碼可以在各種平台上編譯和運行。
*   **豐富的生態系統：** 廣泛的函式庫和工具。

## 開發環境搭建

要編寫和運行 C++ 程式碼，通常需要：
1.  **文字編輯器或 IDE：** Visual Studio Code、Visual Studio、CLion、Eclipse 等。
2.  **C++ 編譯器：** GCC (GNU Compiler Collection)、Clang、MSVC (Microsoft Visual C++)。

**範例設定（Linux/macOS 與 GCC/Clang）：**
安裝 build-essential (Linux) 或 Xcode Command Line Tools (macOS)。

```bash
# 在 Ubuntu/Debian 上
sudo apt update
sudo apt install build-essential

# 在 macOS 上
xcode-select --install
```

## 你的第一個 C++ 程式

讓我們編寫一個簡單的「Hello, World!」 C++ 程式。

<UniversalEditor title="Hello World Comparison" compare={true}>
```javascript !! js
// JavaScript: Hello World
console.log("Hello, World from JavaScript!");
```

```cpp !! cpp
// C++: Hello World
#include <iostream> // 包含輸入/輸出流函式庫

int main() { // 主函式：程式的入口點
    std::cout << "Hello, World from C++!" << std::endl; // 打印到控制台
    return 0; // 表示成功執行
}
```
</UniversalEditor>

## 編譯和連結過程

要編譯並運行 C++ 「Hello, World!」 程式（假設你將其保存為 `hello.cpp`）：

1.  **編譯：**
    ```bash
    g++ hello.cpp -o hello
    ```
    *   `g++`：C++ 編譯器（GCC 的一部分）。
    *   `hello.cpp`：你的原始碼檔案。
    *   `-o hello`：指定輸出的可執行檔案名為 `hello`。

2.  **運行：**
    ```bash
    ./hello
    ```
    這將執行編譯後的程式，並在你的控制台打印「Hello, World from C++!」。

---

### 練習題：
1.  C++ 這樣的編譯型語言與 JavaScript 這樣的解釋型語言之間主要區別是什麼？
2.  列舉三個 C++ 優於 JavaScript 的常見應用領域，並解釋原因。
3.  描述編譯和連結一個簡單的 C++ 程式所涉及的步驟。

### 專案構想：
*   用 C++ 創建一個簡單的命令行計算器，可以執行基本的算術運算（加、減、乘、除）。
